package com.foreveross.mofang.serviceconsole.application.core;

import java.util.List;

import org.openkoala.koala.auth.core.domain.User;

import com.foreveross.mofang.serviceconsole.application.dto.GroupDTO;
import com.foreveross.mofang.serviceconsole.core.Group;

/**
 * 渠道及任务组基础层接口
 * 
 * @author fb
 *
 */
public interface GroupApplication {

	/**
	 * 根据id获取组信息
	 * 
	 * @param id
	 * @return
	 */
	GroupDTO getGroup(Long id);

	/**
	 * 新建组信息
	 * 
	 * @param group
	 *            组dto
	 * @param loginUser
	 *            当前登录者
	 * @param clazz
	 *            要新建的组对象
	 * @throws Exception
	 */
	void saveGroup(GroupDTO group, User loginUser, Class<? extends Group> clazz)
			throws Exception;

	/**
	 * 更新相关组数据
	 * 
	 * @param group
	 *            组dto
	 * @param loginUser
	 *            当前登录者
	 */
	void updateGroup(GroupDTO group, User loginUser);

	/**
	 * 根据id标记废除组
	 * 
	 * @param id
	 *            id
	 * @param loginUser
	 *            当前登录者
	 */
	void removeGroup(Long id, User loginUser);

	/**
	 * 批量废除组
	 * 
	 * @param ids
	 * @param loginUser
	 */
	void removeGroups(Long[] ids, User loginUser);

	/**
	 * 获取所有处理根结点数据，默认会获取结点下所有子数据
	 * 
	 * @param clazz
	 * @return
	 */
	List<GroupDTO> getRoots(Class<? extends Group> clazz);

	/**
	 * 获取所有组信息，不带父子关系数据
	 * 
	 * @return
	 */
	List<GroupDTO> findAllGroup();
}
